// 版权归Go作者所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// go:build aix | | darwin | | | dragonfly | | | freebsd | | linux | | netbsd | | openbsd | | solaris 

package modload

import (
	"io/fs"
	"os"
	"syscall"
)

// hasWritePerm报告当前用户是否有权使用给定信息写入
// 
// 虽然大多数Unix系统上的root用户即使没有
// 权限也可以写入文件，但如果没有设置适当的权限位，即使当前用户是root，hasWritePerm也会报告false。
func hasWritePerm(path string, fi fs.FileInfo) bool {
	if os.Getuid() == 0 {
		// 根用户可以访问任何文件，但我们仍然希望默认为
		// 只读模式，如果。mod file被标记为全局不可写。
		// （如果用户真的不想处于只读模式，他们可以显式地传递-mod=mod。）
		return fi.Mode()&0222 != 0
	}

	const W_OK = 0x2
	return syscall.Access(path, W_OK) == nil
}
